<?php

namespace Transaccion\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Transaccion\Model\Entity\IngresoMalla;
use Transaccion\Controller\Service\GenericService;
use Transaccion\Model\Dao\IngresoMallaDAO;
use Maestros\Controller\Service\MallaService;
use Transaccion\Controller\Service\DatosAcademicosService;

//SERVICIO
class IngresoMallaService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $ingresoMallaService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$ingresoMallaService == null) {
            self::$ingresoMallaService = new IngresoMallaService($adapter);
        }
        return self::$ingresoMallaService;
    }

    public function getIngresoMallaDao() {
        return IngresoMallaDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getRegistro($id) {
        $data = null;
        $success = false;
        $ingresoMalla = $this->obtenerIngresoMallaSegunId($id);
        if ($datosIngreso->getId() != null) {
            $data[0] = $ingresoMalla->objectToArray();
            $success = true;
        }
        return UtilsArrayController::organizarOutput($success, $data, null);
    }
    
    public function getRegistroCompleto($id) {
        $ingresoMalla = $this->obtenerIngresoMallaSegunId($id);
        $registros = $this->armarRegistroCompleto($ingresoMalla);
       return $registros;
    }
    
    public function getRegistroCompletoSegunDatoIngreso($id) {
        $registros = $this->obtenerIngresoMallaSegunDatoIngreso($id);
        if (count($registros) > 0) {
            $success = true;
            $mensaje = 'DATOS ENCONTRADOS';
            $ingresosMallas = $this->llenarArreglo($registros);
        }
        $output = array(
            'success' => $success,
            'data' => $ingresosMallas,
            'total' => count($ingresosMallas),
            'mensaje' => $mensaje
        );
        return $output;
       
    }
    
    public function getRegistroCompletoPorDatoIngreso($id) {
        $ingresoMalla = $this->getIngresoMallaDao()->getRegistro($id);
        return $this->armarRegistroCompleto($ingresoMalla);
    }
    
    
    public function armarRegistroCompleto($ingresoMalla) {
        $mensaje = 'Ingreso Malla no encontrado';
        $data = null;
        $success = false;
        $servicioMalla = MallaService::getInstance($this->dbAdapter);
        $malla = $servicioMalla->getRegistroCompleto($ingresoMalla->getMalla());
        $servicioDatosAcademicos = DatosAcademicosService::getInstance($this->dbAdapter);
        $datosAcademicos = $servicioDatosAcademicos->getRegistroCompletoSegunIngresoMalla($ingresoMalla->getId());
        if ($ingresoMalla->getId() != null) {
            $data[0] = $ingresoMalla->objectToArray();
            $success = true;
            $data[0]['_malla'] = $malla['data'];
            $data[0]['_datosIngreso'] = $datosAcademicos['data'];
            
            $mensaje = 'Ingreso Malla ENCONTRADA';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
        );
        
        return $output;
    }
    
    public function llenarArreglo($registros) {
        foreach ($registros as $row) {
            $ingresosMallas[] = array(
                'id' => $row['id'],
            );
        }
       for ($i = 0; $i < count($ingresosMallas); $i++) {
           $ingresomalla = $this->getRegistroCompleto($ingresosMallas[$i]['id']);
           $ingresosMallas[$i] = $ingresomalla['data'];
        }
     return $ingresosMallas;
    }
    

//------Retornan los objetos-------

    /**
     * Dado el id del datosIngreso se trae el registro asociado
     * convirtiendolo primero en objeto y luego lo retorna
     * @param $id type string
     * @return Objeto IngresoMalla
     */
    public function obtenerIngresoMallaSegunId($id) {
        $registros = $this->getIngresoMallaDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $ingresoMalla = new IngresoMalla($data[0]);
        $ingresoMalla->setId($data[0]['id']);
        $ingresoMalla->setDatosIngreso($data[0]['id_datos_ingreso']);
        $ingresoMalla->setMalla($data[0]['id_malla']);
        return $ingresoMalla;
    }
    
    public function obtenerIngresoMallaSegunDatoIngreso($id) {
        $registros = $this->getIngresoMallaDao()->getRegistroSegunDatoIngreso($id);
        return $registros;
    }

//-----------------------------------
}
